package com.class04.base;

import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.args.ListPosition;

/**
 * @ClassDescription:
 * @JdkVersion: 17
 * @Author: yxy
 * @Created: 2024/1/4 11:07
 */
public class ListTest {
    private Jedis jedis = new Jedis("127.0.0.1", 6379);

    @Test
    public void test() {
//        清空当前库的数据
        jedis.flushDB();
//        插入列表(list)数据 key是list 字段值1,2,3,4,5
        jedis.lpush("list", "1", "2", "3", "4", "5");
        jedis.lpush("mylist", "1", "2", "3", "4", "5");

    }

    @Test
    public void test1() {
//        查询所有list列表中的数据
        jedis.lrange("list", 0, -1).forEach(System.out::print);
        System.out.println();
//        BLPOP key1 [key2 ] timeout
//移出并获取列表的第一个元素， 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
//        List<String> list = jedis.blpop(1000, "list");
//        list.forEach(System.out::println);
//        List<String> list = jedis.brpop(1000, "list");
//        list.forEach(System.out::println);


//        LINDEX key index
//通过索引获取列表中的元素
        System.out.println(jedis.lindex("list", 0));

    }

    @Test
    public void test2() {
//        5	LINSERT key BEFORE|AFTER pivot value
//        在列表的元素前或者后插入元素
//        jedis.linsert("list", ListPosition.BEFORE, "1", "100");
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        6	LLEN key
//        System.out.println(jedis.llen("list"));
//        获取列表长度
//        7	LPOP key
//        移出并获取列表的第一个元素
//        System.out.println(jedis.lpop("list"));
//        8	LPUSH key value1 [value2]
//        将一个或多个值插入到列表头部
//        jedis.lpush("list", "100", "200");
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        9	LPUSHX key value
//                将一个值插入到已存在的列表头部
//        long list = jedis.lpushx("list", "1000");
//        System.out.println(list);

//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        10	LRANGE key start stop
//        获取列表指定范围内的元素

//        11	LREM key count value
//        移除列表元素
//        System.out.println(jedis.lrem("list", 2, "1000"));
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        12	LSET key index value
//        通过索引设置列表元素的值
//        jedis.lset("list", 0, "10000");
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        13	LTRIM key start stop
//        对一个列表进行修剪(trim)，就是说，让列表只保留指定区间内的元素，不在指定区间之内的元素都将被删除。
//        jedis.ltrim("list", 2, 5);
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        14	RPOP key
//        移除列表的最后一个元素，返回值为移除的元素。
//        System.out.println(jedis.rpop("list"));
//        15	RPOPLPUSH source destination
//        移除列表的最后一个元素，并将该元素添加到另一个列表并返回
//        String rpoplpush = jedis.rpoplpush("list", "mylist");
//        System.out.println(rpoplpush);
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        jedis.lrange("mylist", 0, -1).forEach(System.out::println);
//        16	RPUSH key value1 [value2]
//        在列表中添加一个或多个值到列表尾部
//        jedis.rpush("list", "10000", "20000", "30000");
//        jedis.lrange("list", 0, -1).forEach(System.out::println);
//        jedis.rpush("List", "10000", "20000", "30000");
//        jedis.lrange("List", 0, -1).forEach(System.out::println);
//        17	RPUSHX key value
//                为已存在的列表添加值
        System.out.println(jedis.rpushx("LIST", "10000", "20000", "30000"));
        jedis.lrange("LIST", 0, -1).forEach(System.out::println);
    }
}
